# -*- coding: utf-8 -*-
from Modele.Entite.Objet import *

class Map:
	def __init__(self, modele):
		self.dictEtages = dict() #{nomEtage:etage}
		self.modele = modele


	def creationEtage(self, modele, nomEtage, nbZones):
		self.dictEtages[nomEtage] = Etage(self.modele,nomEtage, nbZones)
		self.dictEtages[nomEtage].remplirEtage()
		self.remplirMap(modele,nomEtage)
	def remplirMap(self, modele, nomEtage): 
		#Francis  
		#Mur du contour
		"""
		for i in range(0,self.dictEtages[nomEtage].nbZones):#SUD
			self.dictEtages[nomEtage].matriceZones[0][i].type = "m"
			i+= 1
		for i in range(0, self.dictEtages[nomEtage].nbZones):#NORD
			self.dictEtages[nomEtage].matriceZones[5][i].type = "m"
			i += 1
		for i in range(0,self.dictEtages[nomEtage].nbZones):#OUEST
			self.dictEtages[nomEtage].matriceZones[i][0].type = "m"
			i+= 1
		for i in range(0,self.dictEtages[nomEtage].nbZones):#EST
			self.dictEtages[nomEtage].matriceZones[i][5].type = "m"
			i+= 1
		#Test porte
		self.dictEtages[nomEtage].matriceZones[2][2].type = "p"
		"""
		
		#Ouvrir le fichier
		#Vous voulez modifier l'étage? Mettez en commentaires trois des quatre étages disponibles (celui qui vous voulez afficher ne doit pas être en commentaires)
		fichier = open("BlockFort" + nomEtage + "Map.txt", "r")
		#fichier = open("BlockFortForceMap.txt","r"))
		#fichier = open("BlockFortIntelligenceMap.txt", "r")
		#fichier = open("BlockFortResilienceMap.txt", "r")
		#fichier = open("BlockFortSagesseMap.txt", "r")
		
		for y, line in enumerate(fichier.readlines()):
			newLine = line[:13]
			line = line[:-1] #because of /n
			
			for x, caract in enumerate(newLine):
				self.dictEtages[nomEtage].matriceZones[x][y].type = caract
				#print(caract)
				
				
		zone = self.dictEtages[nomEtage].matriceZones
		for p in range(0,9):
			self.dictEtages[nomEtage].dictPieces["Piece"+str(p)] = Piece(modele, nomEtage)
			for i in range (0, 4):
				for j in range (0,4):
					if i%4 != 0 and j%4 != 0:
						self.dictEtages[nomEtage].dictPieces["Piece"+str(p)].ajoutZone(modele,zone[i+(p%3 *4)][j+(int(p/3) * 4)].nom, zone[i][j])
						#On ajoute des zones à des pièces, mais est-ce que les zones savent à quelle pièce elles appartiennent?

		#Fermer le fichier
		fichier.close()

class Etage:
	def __init__(self, modele, nomEtage, nbZones):
		self.dictPieces = dict()

		self.modele = modele

		self.nom = nomEtage
		self.nbZones = nbZones #le nombre de zones correspond aux zones sur une ligne, mais les étages sont toujours carrés, donc il va ensuite créer (2x2)
		self.taille = [nbZones*10,nbZones*10]#Donc Nb de zones*10(taille des zones) +(Nb de zones+1(taille des espaces))
		self.matriceZones = []

	def remplirEtage(self):#Selon le nom de l'étage, on créé un nombre différent de pièces (ou possiblement d'autres options)
		indexZone = 0
		ligneZones = []
		if self.nom == "Force":
			for i in range(0,self.nbZones):
				for j in range(0,self.nbZones):
					ligneZones.append(Zone(self.modele,"Zone"+str(indexZone),(j*10),(i*10)))
					indexZone += 1
				self.matriceZones.append(ligneZones)
				ligneZones = []
				
		if self.nom == "Resilience":
			for i in range(0,self.nbZones):
				for j in range(0,self.nbZones):
					ligneZones.append(Zone(self.modele,"Zone"+str(indexZone),(j*10) + 200,(i*10)))
					indexZone += 1
				self.matriceZones.append(ligneZones)
				ligneZones = []
				
		if self.nom == "Intelligence":
			for i in range(0,self.nbZones):
				for j in range(0,self.nbZones):
					ligneZones.append(Zone(self.modele,"Zone"+str(indexZone),(j*10) + 400,(i*10)))
					indexZone += 1
				self.matriceZones.append(ligneZones)
				ligneZones = []
				
		if self.nom == "Sagesse":
			for i in range(0,self.nbZones):
				for j in range(0,self.nbZones):
					ligneZones.append(Zone(self.modele,"Zone"+str(indexZone),(j*10) + 600,(i*10)))
					indexZone += 1
				self.matriceZones.append(ligneZones)
				ligneZones = []

class Piece:
	def __init__(self, modele, nomPiece):
		self.dictZones = dict()

		self.modele = modele
		self.nom = nomPiece
		#type de pièce self.type = type
		
	def ajoutZone(self,modele,nomZone,objZone):
		self.dictZones[nomZone] = objZone

class Zone:
	def __init__(self, modele, nomZone, posX, posY):
		self.dictObjets = dict() #objets qu'on peut pickup, etc
		self.type = "" # P, M ou vide
		self.modele = modele
		self.nom = nomZone
		self.taille = [10,10]#[longueur,largeur]
		self.position = [posX,posY] 
